/*
 * @Author: EvanXU evanxu8023@163.com
 * @Date: 2023-08-29 09:22:31
 * @LastEditors: XUYUCHAO EvanXU8023@163.com
 * @LastEditTime: 2025-11-17 21:28:53
 * @FilePath: \program\applications\define.h
 * @Description: 
 *  xxx 
 * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
 */
#ifndef _DEFINE_H_
#define _DEFINE_H_

#include "at32f413.h"
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include "string.h"

//typedef char int8_t;
//typedef short int int16_t;
typedef unsigned char 	u8;
typedef unsigned short	u16;
typedef unsigned int	u32;
typedef short int		int16;

//typedef unsigned char	BOOL;
//typedef unsigned char	BYTE;
//typedef unsigned short int WORD;
// typedef  unsigned int DWORD;
//typedef unsigned int	uint32_t;
//typedef unsigned short	uint16_t;
//typedef unsigned char	uint8_t;
//typedef unsigned long long	uint64_t;
//typedef int	            int32_t;
//typedef short           int16_t;
//typedef char            int8_t;
//typedef long long	    int64_t;

#define delay_ms	wk_delay_ms
#define countof(a) (sizeof(a) / sizeof(*(a))) // 计算数组内的成员个数
/* 向上取最近的整数 */
#define GET_UP_TO_N(x, n)   ( ((x) + (n) - 1) / (n) * (n) )

//#ifndef TRUE
//    #define TRUE    1
//#endif
//#ifndef FALSE
//    #define FALSE   0
//#endif

#define ON      TRUE
#define OFF     FALSE
#define OPEN    TRUE
#define CLOSE   FALSE
#define LEFT    TRUE
#define RIGHT   FALSE
#define SLAVE   TRUE
#define MASTER  FALSE
#define AUTO    TRUE
#define MANUAL  FALSE
#define _START   TRUE
#define STOP    FALSE
#define PAUSE   2

#ifndef NULL
	#define NULL 0
#endif


/* RGB芯片长度范围 */
#define RGB_LENGTH_MAX      500
#define RGB_LENGTH_MIN      8

/**
 * RGB总流动时间范围,单位ms
 * RGB灯带的总流动时间的最大值固定位300s
 * RGB灯带的总流动时间的最小值需要根据RGB灯带长度来计算
 * 通常1m灯带为8颗芯片，我们定义每米的最小流动速度为300ms
 * 每个芯片按照单次1/3步进来控制，则步进间隔时间最小值为300ms / (8 * 3) = 12.5ms
 * 因此灯带流动总时间的最小值 = RGB灯带长度 * 12.5ms，且总时间 >= 1s
 * 8  颗芯片的灯带，最小总流动时间 = 8   * 3 * 12.5ms = 300ms， 就近取大整数1s
 * 48 颗芯片的灯带，最小总流动时间 = 48  * 3 * 12.5ms = 1800ms，就近取大整数2s
 * 100颗芯片的灯带，最小总流动时间 = 100 * 3 * 12.5ms = 3750ms，就近取大整数4s
 * 300颗芯片的灯带，最小总流动时间 = 300 * 3 * 12.5ms = 11250ms，就近取大整数12s
 * 500颗芯片的灯带，最小总流动时间 = 500 * 3 * 12.5ms = 18750ms，就近取大整数19s
 */
#define RGB_FLOW_TIME_MAX   (300*1000)
#define RGB_FLOW_TIME_MIN   (1*1000)
/* RGB全亮保持时间范围,单位ms */
#define RGB_ALL_ON_TIME_MAX (300*1000)
#define RGB_ALL_ON_TIME_MIN (0)
/* RGB灯带亮度范围 */
#define RGB_BRIGHT_MAX      100
#define RGB_BRIGHT_MIN      15

/* 参数ID编号，用于按键切换参数选择 */
typedef enum {
    PARA_ID_NULL,           /* 参数ID，空 */
    PARA_ID_RGB_LENGTH,     /* 参数ID，RGB灯带(芯片)长度 */
    PARA_ID_FLOW_TIME,      /* 参数ID，RGB总流动时间 */
    PARA_ID_ALL_ON_TIME,    /* 参数ID，RGB全亮保持时间 */
    PARA_ID_RGB_BRIGHT,     /* 参数ID，RGB灯带亮度 */
    PARA_ID_RGB_FORMAT,     /* 参数ID，RGB芯片格式 */
    PARA_ID_MAX,            /* 参数ID最大值，无实际意义 */
}PA_ID;

/* RGB芯片格式 */
typedef enum {
    RGB_FORMAT_RGB,        /* 芯片格式,RGB格式 */
    RGB_FORMAT_RBG,        /* 芯片格式,RBG格式 */
    RGB_FORMAT_GRB,        /* 芯片格式,GRB格式 */
    RGB_FORMAT_GBR,        /* 芯片格式,GBR格式 */
    RGB_FORMAT_BRG,        /* 芯片格式,BRG格式 */
    RGB_FORMAT_BGR,        /* 芯片格式,BGR格式 */
    RGB_FORMAT_MAX,        /* 芯片格式最大值，无实际意义 */
}RGB_FORMAT;


/* *******************************系统相关参数定义********************************** */
/* 系统配置数据 */
typedef struct
{
/* 系统参数 */
    uint32_t rgb_length;            /* RGB灯带(芯片)长度 */
    uint32_t flow_time;             /* RGB总流动时间 */
    uint32_t all_on_time;           /* RGB全亮保持时间 */
    uint32_t rgb_bright;            /* RGB灯带亮度 */
    RGB_FORMAT rgb_format;         /* RGB芯片格式 */

}SYS_CFG;



/* 系统运行参数 */
typedef struct
{
	SYS_CFG cfg_para;               /* 系统配置参数 */

    PA_ID para_id;                  /* 当前参数ID */
    uint16_t sensor_a_sta;          /* 传感器A状态 */
    uint16_t sensor_a_trig_en;      /* 传感器A触发使能 */
    uint16_t sensor_b_sta;          /* 传感器B状态 */
    uint16_t sensor_b_trig_en;      /* 传感器B触发使能 */
    
    uint16_t rgb_light_color;       /* rgb亮度颜色值，根据亮度配置参数转换而来 */
    uint16_t rgb_flow_step_time;    /* rgb流动步进间隔时间,单位0.1ms */
    uint16_t rgb_flow_step_en;      /* rgb流动步进允许 */
    uint16_t rgb_a_flow_cnt;        /* rgb A传感器方向流动次数 */
    uint16_t rgb_a_hold_cnt;        /* rgb A传感器方向全亮保持时间计数 */
    uint16_t rgb_hold_time_flag;

    uint16_t rgb_b_flow_cnt;        /* rgb A传感器方向流动次数 */
    uint16_t rgb_b_hold_cnt;        /* rgb A传感器方向全亮保持时间计数 */
    uint8_t rgb_a_sta_buff[RGB_LENGTH_MAX * 3];     /* rgb a传感器方向流动状态缓存 */
    uint8_t rgb_b_sta_buff[RGB_LENGTH_MAX * 3];     /* rgb b传感器方向流动状态缓存 */
    
    uint32_t rgb_flow_time_min;  /* rgb移动总时间最小值,单位1ms */
    
}USER_PARA;


#endif


